Computers have become an integral tool used in a wide variety of different applications, such as in finance and commercial transactions, three-dimensional and real-time graphics, computer-aided design and manufacturing, healthcare, telecommunications, education, etc. Computers are finding new applications as their performance and speeds ever increase while costs decrease due to advances in hardware technology and rapid software development. Furthermore, a computer system's functionality and usefulness can be dramatically enhanced by coupling stand-alone computers together to form a computer network. In a computer network, users may readily exchange files, share information stored on a common database, pool resources, communicate via e-mail and even video teleconference.
One popular type of network setup is known as "client/server" computing. Basically, users perform tasks through their own dedicated desktop computer (i.e., the "client"). The desktop computer is networked to a larger, more powerful central computer (i.e., the "server"). The server acts as an intermediary between a group of clients and a database stored in a mass storage device. An assortment of network and database software enables communication between the various clients and the server. Hence, in a client/server arrangement, the data is easily maintained because it is stored in one location and maintained by the server; the data can be shared by a number of local or remote clients; the data is easily and quickly accessible; and clients may readily be added or removed.
Normally, vast amounts of data are stored in the form of one or more databases residing on a number of hard disk drives of a disk array coupled to the server. The main advantages for storing data in this fashion is because it is relatively inexpensive and because the data is retained even when power is turned off. However, accessing this data can take a relatively long time due to the electro-mechanical nature of hard disk drives. First, the appropriate disk within one of the hard disk drives must be rotated to the desired sector corresponding to the data that is to be read or written. In addition, the servomechanism must move the actuator assembly to place the transducer to the correct track. Only then can the data be written to or read from the disk. Often, data is scattered in many different locations and multiple seeks must be performed for a single read or write operation. Given that a transaction might entail initiating numerous read/write operations, the cumulative time required in performing disk I/O operations can add up to become quite substantial. Hence, having to perform numerous disk I/O operations acts as a bottleneck in the flow of data. As a result, it drastically slows down the overall performance of the computer system.
In an effort to reduce the time required to access data, client/server computer systems have now incorporated a section of "cache" memory. Typically, the cache memory is comprised of banks of random access memory (RAM) chips. Hence, data can be accessed electronically rather than electromechanically. Hence cache access can be performed at extremely fast speeds. Another advantage is that implementing a global cache memory allows data to be shared and accessed by multiple users. But since cache memory is volatile, most of the data is stored in the disk array. Furthermore, cache memory costs more than an equivalent amount of hard disk memory. Consequently, the capacity of the cache memory is smaller than that of the disk array. Hence, there is only a limited amount of data which can be retained in the cache at any given time.
Due to the restricted size of the cache memory, it is important to utilize it efficiently. The efficiency of a cache system depends on how often the requested data can be found in the cache. If the requested data currently resides in the cache (i.e., a "hit"), the data is simply retrieved from the cache. On the other hand, if the requested data does not currently reside in the cache (i.e., a "miss"), it must be read from the hard disk drive, thereby requiring a relatively slow disk I/O operation. Moreover, before the new entry can be cached, an existing entry must be written back to the disk array to make room for the new entry. Writing back the older entry requires another disk I/O operation. Consequently, cache misses are highly undesirable because they take a relatively long time to process. Therefore, it would be highly preferable for cache systems if the hit rate can somehow be increased while the number of misses is minimized.
The present invention provides a solution for improving the efficiency of a cache system by selectively caching data objects. The present inventors have discovered that with modern computer systems, every data object that is accessed is also typically cached. However, it is often the case that some data objects will not be used more than once. In these cases, the data objects tend to clutter the cache and might even cause more useful data to be purged from the cache. By keeping these once-only type data objects from being globally cached, the present invention allows better cache utilization, reduced processing overhead, and improved overall performance.